const jsonServer=require('json-server');
const db = require('./db.js');//引入mockjs配置模块
const path = require('path');//引入node模块
const Mock = require('mockjs');
let mock='/mock';//定义路由根别名，也可以定义为/api，随意的定义
let time=1000;//延时返回数据

//创建服务器/json-server或node或express服务环境
const server = jsonServer.create();//创建jsonserver 服务对象

//配置jsonserver服务器 中间件
server.use(jsonServer.defaults({
    static:path.join(__dirname, '/public'),//静态资源托管
}));

server.use(jsonServer.bodyParser);//抓取body数据使用json-server中间件


//响应
server.use((req, res, next) => {//可选 统一修改请求方式
    // console.log(1)
    // request.method = 'GET';
    // token 携带的校验
    if (req.url.includes('/login')||req.url.includes('/reg')){
        next()  //是登录或者注册接口就不拦截
    } else {
        if (req.headers.token && req.headers.token.length===16){
            //token的长度
            next()   //验证token和长度是否携带，token带在头部
        } else {
            setTimeout(()=>{
                res.jsonp({
                    err:2,
                    msg:'token有误，或者过期'
                })
            },time)  //延时判断，返回结果
        }
    }

});

//登录注册校验
let mr = Mock.Random;//提取mock的随机对象，mock模块的方法
server.get(mock+'/login', (req, res) => {//响应/mock或/api+/login的接口
    // console.log(req.query, req.body);//抓取提交过来的query和body
    let username=req.query.username;
    let password=req.query.password;
    (username === 'aa' && password === 'aa123')?
        res.jsonp({
            "err": 0,
            "msg": "登录成功",
            "data": {
                "follow": mr.integer(1,5),
                "fans": mr.integer(1,5),
                "nikename": mr.cname(),
                "icon": mr.image('20x20',mr.color(),mr.cword(1)),
                "time": mr.integer(13,13)
            },
            "token":mr.integer(16)  //token16位
        }) :
        res.jsonp({
            "err": 1,
            "msg": "登录失败",
        })

});
server.post(mock+'/reg', (req, res) => {
    let username=req.body.username;
    (username !== 'aa') ?
        res.jsonp({
            "err": 0,
            "msg": "注册成功",
            "data": {
                "follow": mr.integer(0,0),
                "fans": mr.integer(0,0),
                "nikename": mr.cname(),
                "icon": mr.image('20x20',mr.color(),mr.cword(1)),
                "time": mr.integer(13,13)
            }
        }) :
        res.jsonp({
            "err": 1,
            "msg": "注册失败",
        })

});

//响应mock接口
const router = jsonServer.router(db);//创建路由对象 db为mock接口路由配置 db.js  db==object

//自定义返回结构
router.render = (req, res) => {//自定义返回结构
    let len = Object.keys(res.locals.data).length; //判断数据是不是空数组和空对象
    // console.log(len);

    setTimeout(()=>{//模拟服务器延时
        res.jsonp({
            err: len !== 0 ? 0 : 1,
            msg: len !== 0 ? '成功' : '失败',
            data: res.locals.data
        })
    },time)

    // res.jsonp(res.locals.data)

};

//定义mock接口别名
server.use(jsonServer.rewriter({//路由自定义别名
    [mock+"/*"]: "/$1",

    "/api/*": "/$1",
    "/course/:id/check": "/course/:id",
    "/list?category=:category": "/list/:category",
    "/course/find\\?id=:id": "/course/:id"

    // "/product\\?dataName=:dataName": "/:dataName",
    // "/banner\\?dataName=:dataName": "/:dataName",
    // "/detail\\?dataName=:dataName&id=:id": "/:dataName/:id",

    // "/product/del\\?dataName=:dataName&id=:id": "/:dataName/:id",
    // "/product/add\\?dataName=:dataName": "/:dataName",
    // "/product/check\\?dataName=:dataName&id=:id": "/:dataName/:id"
}));

server.use(router);//路由响应



//开启jsonserver服务
server.listen(3003, () => {
    console.log('mock server is running')
});